今天要來介紹的是區塊鏈的訊息和編碼,對內容有興趣的歡迎一起看下去喔!
block.timestamp:指的是當前區塊的時間戳,使用UNIX時間秒(指的是從UTC1970年1月1日0時0分0秒起至現在的總秒數,不考慮閏秒),執行於兩個區塊間,代表的時間不一定是正確的,只顯示於兩者間的某處。
● block.basefee:指的是當前區塊的基本費用
● block.coinbase:指的是當前區塊的礦工網址
● block.difficulty:指的是當前區塊難度
● block.gaslimit:指的是當前區塊的gas limit(對於什麼是gas不了解的人可以到[Day 13] 認識以太坊看看,那篇有稍微提到~~)
● block.number:指的是當前區塊的編號
小實作:計算當前時間加一天後的時間
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Practicetime2{
function tomorrow () public view returns(uint){
uint now = block.timestamp;
return now + 86400;
}
}
當要將內容發送給合約時,需解讀成能讓合約讀懂的數據型態,因而才有編碼和解碼的出現。
● 對特定參數進行編碼:abi.encode(data,(uint…)) returns (bytes memory)
● 對特定資料進行解碼:abi.decode(bytes memory encoded data,(…))returns(…)
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Practicetime3{
function encode(string memory _str1, string memory _str2, uint _uint)
public returns (bytes memory) {
return (abi.encode(_str1, _str2, _uint));
}
function decode(bytes memory data)
public returns(string memory _str1, string memory _str2, uint _number){
(_str1, _str2, _number) = abi.decode(data,(string,string, uint));
}
}
在撰寫智慧合約時一定少不了區塊的相關訊息,而透過編碼讓合約解讀也是一個很重要的流程之一。
今天的內容主要是Solidity訊息和編碼的介紹,感謝看到最後的你~~~
參考書籍:Solidity實戰全書
參考資料: https://www.panewslab.com/zh_hk/articledetails/D04801114.html